QRCodePage Component
The QRCodePage component renders a full-screen, styled page that displays a QR code for users to join a game room. It extracts the roomId and storyTitle from the URL parameters, dynamically generates a join URL, and uses the react-qrcode-logo library to display the code. It also integrates auditory feedback for accessibility using custom hooks for text-to-speech and button click sounds.
Components
QRCodePage
- A wrapper component that renders
QRCodeContentinside aSuspenseboundary. - Displays a fallback message (
"Loading...") while waiting for parameters or rendering delays.
QRCodeContent
- Main logic and UI for rendering the QR code page.
- Retrieves query parameters, builds a join URL, and provides interactive, styled elements with accessibility features.
Hooks Used
useSearchParams(): Fromnext/navigation, used to retrieveroomIdandstoryTitlefrom the URL.useQuickTextToSpeech(): Custom hook for invoking text-to-speech functionality.useButtonFeedback(): Custom hook to handle sound effects and speech when interacting with elements.
Behavior
- Dynamically constructs a join URL using query parameters:
const joinRoomUrl = `https://project-aac-game-team-b--storyquest-fcdc2.us-central1.hosted.app/Gameplay/\${roomId}/\${storyTitle}\;` - If no
roomIdis found, an error message is displayed. - QR code is rendered using the
QRCodecomponent with customizable visual parameters. - Image steps provide a visual guide for how to use the QR code, with associated auditory feedback.
- Clickable text elements trigger text-to-speech narration using the provided hooks.
Visual Elements
- Background: Full-screen background image with a blurred, semi-transparent foreground container.
- Title: "Scan to Join Room" (speech-enabled).
- Instructions: Four visual steps showing how to join the game using the QR code.
- QR Code: Styled QR code inside a bordered, shadowed container.
- Call to Action: Final instructional text prompting users to share the QR code.
Usage Example
This page is intended to be routed through a Next.js app/ directory with a URL containing roomId and storyTitle query parameters:
/CreateRoom/qrcode?page.tsx?roomId=abc123&storyTitle=MyStory
Dependencies
react-qrcode-logonext/navigationnext/image- Custom hooks from
/Components:useQuickTextToSpeechuseButtonClickSounds